home *** CD-ROM | disk | FTP | other *** search
- unit ADOXU1;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
- StdCtrls, Db, ADODB, Grids, DBGrids, ADOX_TLB, ADOInt;
-
- type
- TForm1 = class(TForm)
- Button1: TButton;
- Memo1: TMemo;
- ADOConnection1: TADOConnection;
- btnStruct: TButton;
- Button3: TButton;
- Button2: TButton;
- Button4: TButton;
- ADOConnection2: TADOConnection;
- DBGrid1: TDBGrid;
- ADOTable1: TADOTable;
- DataSource1: TDataSource;
- CheckBox1: TCheckBox;
- btnModify: TButton;
- btnAlterCol: TButton;
- Button5: TButton;
- Button6: TButton;
- btnAutoInc: TButton;
- Label1: TLabel;
- edtColName: TEdit;
- btnCreateIndex: TButton;
- btnCreateCIndex: TButton;
- Button7: TButton;
- btnAddPKey: TButton;
- btnDropPKey: TButton;
- btnAddFKey: TButton;
- btnChangeRule: TButton;
- btnDeleteFKey: TButton;
- CheckBox2: TCheckBox;
- Button8: TButton;
- procedure Button1Click(Sender: TObject);
- procedure btnStructClick(Sender: TObject);
- procedure Button3Click(Sender: TObject);
- procedure Button2Click(Sender: TObject);
- procedure Button4Click(Sender: TObject);
- procedure CheckBox1Click(Sender: TObject);
- procedure btnModifyClick(Sender: TObject);
- procedure btnAlterColClick(Sender: TObject);
- procedure Button5Click(Sender: TObject);
- procedure Button6Click(Sender: TObject);
- procedure btnAutoIncClick(Sender: TObject);
- procedure btnCreateIndexClick(Sender: TObject);
- procedure btnCreateCIndexClick(Sender: TObject);
- procedure Button7Click(Sender: TObject);
- procedure btnAddPKeyClick(Sender: TObject);
- procedure btnDropPKeyClick(Sender: TObject);
- procedure btnAddFKeyClick(Sender: TObject);
- procedure btnChangeRuleClick(Sender: TObject);
- procedure btnDeleteFKeyClick(Sender: TObject);
- procedure CheckBox2Click(Sender: TObject);
- procedure Button8Click(Sender: TObject);
- private
- procedure AlterColumn(ADOConnection: TADOConnection; strTable,
- strColumn: string; intSize: integer);
- procedure ShowProperties(Props: ADOX_TLB.Properties);
- { Private declarations }
- public
- { Public declarations }
- end;
-
- var
- Form1: TForm1;
-
- implementation
-
- {$R *.DFM}
-
- uses
- ComObj;
-
- procedure TForm1.Button1Click(Sender: TObject);
- var
- Cat: Catalog;
- intTable: integer;
- begin
- Cat:=CreateCOMObject(Class_Catalog) as Catalog;
- Cat.Set_ActiveConnection(ADOConnection1.ConnectionObject);
- for intTable:=0 to Cat.Tables.Count - 1 do
- if Cat.Tables.Item[intTable].Type_='TABLE' then
- Memo1.Lines.Add(Cat.Tables.Item[intTable].Name);
- end;
-
- function ColumnToSQLDataType(Col: Column): string;
- begin
- Result:=IntToStr(Col.Type_);
- // this list is only a subset of the full list
- with Col do begin
- case Col.Type_ of
- adDate : Result:='DATE';
- adDouble, adCurrency, adSingle : Result:='NUMERIC('+IntToStr(Col.Precision)+', '+IntToStr(Col.NumericScale)+')';
- adInteger, adSmallInt: Result:='INTEGER('+IntToStr(Col.Precision)+')';
- adVarChar: Result:='VARCHAR('+IntToStr(Col.DefinedSize )+')';
- adWChar : Result:='VARCHAR('+IntToStr(Col.DefinedSize )+')';
- end;
- end;
- end;
-
- function TableToSQLCREATETABLE(tbl: Table): string;
- var
- intColumn: integer;
- Col: Column;
- begin
- Result:='CREATE TABLE '+tbl.Name+' (';
- for intColumn:=0 to tbl.Columns.Count - 1 do
- begin
- Col:=tbl.Columns.Item[intColumn];
- Result:=Result+Col.Name+' '+ColumnToSQLDataType(Col);
- if intColumn <> tbl.Columns.Count - 1 then
- Result:=Result+', ';
- end;
- Result:=Result+')';
- end;
-
- procedure TForm1.btnStructClick(Sender: TObject);
- var
- Cat: Catalog;
- begin
- Cat:=CreateCOMObject(Class_Catalog) as Catalog;
- Cat.Set_ActiveConnection(ADOConnection1.ConnectionObject);
- Memo1.Lines.Add(TableToSQLCREATETABLE(Cat.Tables['Order Details']));
- end;
-
- procedure TForm1.Button3Click(Sender: TObject);
- var
- Cat: Catalog;
- intProp: integer;
- tbl: Table;
- Prop: ADOX_TLB.Property_;
- strValue: string;
- begin
- Cat:=CreateCOMObject(Class_Catalog) as Catalog;
- Cat.Set_ActiveConnection(ADOConnection1.ConnectionObject);
- tbl:=Cat.Tables['Customers'];
- for intProp:=0 to tbl.Properties.Count - 1 do
- begin
- Prop:=tbl.Properties.Item[intProp];
- strValue:=Prop.Value;
- if (Prop.Attributes and adPropWrite) = adPropWrite then
- Memo1.Lines.Add(Prop.Name+'='+strValue)
- else
- Memo1.Lines.Add(Prop.Name+'='+strValue+' (Read only)');
- end;
- end;
-
- procedure TForm1.ShowProperties(Props: ADOX_TLB.Properties);
- var
- intProp: integer;
- Prop: ADOX_TLB.Property_;
- strValue: string;
- begin
- for intProp:=0 to Props.Count - 1 do
- begin
- Prop:=Props.Item[intProp];
- strValue:=Prop.Value;
- if (Prop.Attributes and adPropWrite) = adPropWrite then
- Memo1.Lines.Add(Prop.Name+'='+strValue)
- else
- Memo1.Lines.Add(Prop.Name+'='+strValue+' (Read only)');
- end;
- end;
-
- procedure TForm1.Button2Click(Sender: TObject);
- var
- Cat: Catalog;
- strConnection: string;
- begin
- Cat:=CreateCOMObject(Class_Catalog) as Catalog;
- strConnection:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Temp\Test.mdb';
- strConnection:=strConnection+';Jet OLEDB:Engine Type=4';
- Cat.Create(strConnection);
- end;
-
- procedure TForm1.Button4Click(Sender: TObject);
- var
- Cat: Catalog;
- tbl: Table;
- begin
- Cat:=CreateCOMObject(Class_Catalog) as Catalog;
- Cat.Set_ActiveConnection(ADOConnection2.ConnectionObject);
-
- tbl:=CreateCOMObject(Class_Table) as Table;
- tbl.Name:='Customers';
-
- tbl.Columns.Append('CUSTID' , adInteger, 0 );
- tbl.Columns.Append('CUSTNAME', adVarWChar, 15);
- tbl.Columns.Append('PHONE' , adVarWChar, 15);
-
- // create the table
- Cat.Tables.Append(tbl);
- end;
-
- procedure TForm1.CheckBox1Click(Sender: TObject);
- begin
- ADOTable1.Active:=CheckBox1.Checked;
- end;
-
- procedure TForm1.btnModifyClick(Sender: TObject);
- var
- Cat: Catalog;
- tbl: Table;
- begin
- Cat:=CreateCOMObject(Class_Catalog) as Catalog;
- Cat.Set_ActiveConnection(ADOConnection2.ConnectionObject);
-
- tbl:=Cat.Tables['Customers'];
- tbl.Columns.Delete('PHONE');
- tbl.Columns.Append('FAX', adVarWChar, 15);
- end;
-
- procedure TForm1.btnAlterColClick(Sender: TObject);
- begin
- AlterColumn(ADOConnection2, 'Customers', 'CUSTNAME', 30);
- end;
-
- procedure TForm1.AlterColumn(ADOConnection: TADOConnection; strTable: string;
- strColumn: string; intSize: integer);
- var
- Cat: Catalog;
- tbl: Table;
- Col: Column;
- DataType: DataTypeENum;
- begin
- Cat:=CreateCOMObject(Class_Catalog) as Catalog;
- Cat.Set_ActiveConnection(ADOConnection.ConnectionObject);
-
- tbl:=Cat.Tables[strTable];
- Col:=tbl.Columns.Item[strColumn];
- DataType:=Col.Type_;
-
- tbl.Columns.Append('TEMP', DataType, Col.DefinedSize);
- ADOConnection.Execute('UPDATE '+strTable+' SET TEMP='+strColumn);
- tbl.Columns.Delete(strColumn);
- tbl.Columns.Append(strColumn, DataType, intSize);
- ADOConnection.Execute('UPDATE '+strTable+' SET '+strColumn+'=TEMP');
- tbl.Columns.Delete('TEMP');
- end;
-
- procedure TForm1.Button5Click(Sender: TObject);
- begin
- ADOConnection2.Execute('UPDATE Customers SET TEMP=CUSTNAME');
- end;
-
- procedure TForm1.Button6Click(Sender: TObject);
- var
- Cat: Catalog;
- tbl: Table;
- begin
- Cat:=CreateCOMObject(Class_Catalog) as Catalog;
- Cat.Set_ActiveConnection(ADOConnection2.ConnectionObject);
-
- tbl:=Cat.Tables['Customers'];
- tbl.Columns.Delete(edtColName.Text);
- end;
-
- procedure TForm1.btnAutoIncClick(Sender: TObject);
- var
- Cat: Catalog;
- tbl: OLEVariant;
- Col: Column;
- begin
- Cat:=CreateCOMObject(Class_Catalog) as Catalog;
- Cat.Set_ActiveConnection(ADOConnection2.ConnectionObject);
-
- tbl:=Cat.Tables['Customers'];
-
- Col:=CreateCOMObject(Class_Column) as Column;
- Col.Name:='CUSTNO';
- Col.Type_:=adInteger;
- Col.ParentCatalog:=Cat;
- ShowProperties(Col.Properties);
- // this line will fail if ParentCatalog is not set
- Col.Properties['Autoincrement'].Value:=True;
- tbl.Columns.Append(Col, adInteger, 0);
- end;
-
- procedure TForm1.btnCreateIndexClick(Sender: TObject);
- var
- Cat: Catalog;
- tbl: Table;
- begin
- Cat:=CreateCOMObject(Class_Catalog) as Catalog;
- Cat.Set_ActiveConnection(ADOConnection2.ConnectionObject);
-
- tbl:=Cat.Tables['Customers'];
-
- tbl.Indexes.Append('CUSTNAMEINDEX', 'CUSTNAME');
- end;
-
- procedure TForm1.btnCreateCIndexClick(Sender: TObject);
- var
- Cat: Catalog;
- begin
- Cat:=CreateCOMObject(Class_Catalog) as Catalog;
- Cat.Set_ActiveConnection(ADOConnection2.ConnectionObject);
-
- Cat.Tables['Customers'].Indexes.Append('CUSTNAMECINDEX2', VarArrayOf(['CUSTNAME', 'PHONE']));
- end;
-
- procedure TForm1.Button7Click(Sender: TObject);
- var
- Cat: Catalog;
- tbl: Table;
- begin
- Cat:=CreateCOMObject(Class_Catalog) as Catalog;
- Cat.Set_ActiveConnection(ADOConnection2.ConnectionObject);
-
- tbl:=CreateCOMObject(Class_Table) as Table;
- tbl.Name:='Orders';
-
- tbl.Columns.Append('ORDERID' , adInteger, 0 );
- tbl.Columns.Append('ORDERDATE', adDate , 0);
- tbl.Columns.Append('CUSTNO' , adInteger, 0);
-
- // create the table
- Cat.Tables.Append(tbl);
- end;
-
- procedure TForm1.btnAddPKeyClick(Sender: TObject);
- var
- Cat: Catalog;
- begin
- Cat:=CreateCOMObject(Class_Catalog) as Catalog;
- Cat.Set_ActiveConnection(ADOConnection2.ConnectionObject);
-
- Cat.Tables['Customers'].Keys.Append('KEYNAME', adKeyPrimary, 'CUSTNO', '', '');
- end;
-
- procedure TForm1.btnDropPKeyClick(Sender: TObject);
- var
- Cat: Catalog;
- begin
- Cat:=CreateCOMObject(Class_Catalog) as Catalog;
- Cat.Set_ActiveConnection(ADOConnection2.ConnectionObject);
-
- Cat.Tables['Customers'].Keys.Delete('KEYNAME');
- end;
-
- procedure TForm1.btnAddFKeyClick(Sender: TObject);
- var
- Cat: Catalog;
- begin
- Cat:=CreateCOMObject(Class_Catalog) as Catalog;
- Cat.Set_ActiveConnection(ADOConnection2.ConnectionObject);
-
- Cat.Tables['Orders'].Keys.Append(
- 'FKEY', adKeyForeign, 'CUSTNO', 'Customers', 'CUSTNO');
- end;
-
- procedure TForm1.btnChangeRuleClick(Sender: TObject);
- var
- Cat: Catalog;
- Ky : Key;
- begin
- Cat:=CreateCOMObject(Class_Catalog) as Catalog;
- Cat.Set_ActiveConnection(ADOConnection2.ConnectionObject);
-
- Ky:=CreateCOMObject(Class_Key) as Key;
- Ky.Name:='FKEY';
- Ky.Type_:=adKeyForeign;
- Ky.Columns.Append('CUSTNO', adInteger, 0);
- Ky.RelatedTable:='Customers';
- Ky.Columns['CUSTNO'].RelatedColumn:='CUSTNO';
- Ky.DeleteRule:=adRICascade;
- Ky.UpdateRule:=adRICascade;
- Cat.Tables['Orders'].Keys.Append(Ky, adKeyForeign, 'CUSTNO', 'Customers', 'CUSTNO');
- end;
-
- procedure TForm1.btnDeleteFKeyClick(Sender: TObject);
- var
- Cat: Catalog;
- begin
- Cat:=CreateCOMObject(Class_Catalog) as Catalog;
- Cat.Set_ActiveConnection(ADOConnection2.ConnectionObject);
-
- Cat.Tables['Orders'].Keys.Delete('FKEY');
- end;
-
- procedure TForm1.CheckBox2Click(Sender: TObject);
- begin
- ADOConnection2.Connected:=CheckBox2.Checked;
- end;
-
- procedure TForm1.Button8Click(Sender: TObject);
- begin
- Memo1.Clear;
- end;
-
- end.
-